12章 基本的なデータ型
〜12.4 akht.icon
12.1 数値全般
マジックナンバーを使わない => 名前付き定数を使う
必要であれば0, 1はハードコーディングしていい
0除算を考慮する
型の変換を明確にする
異なる型の値を比較しない(整数型と浮動小数点数型など)
コンパイラの警告に注意する
12.2 整数
整数の除算に注意する
7 / 10がその言語でどうなるか
10 * (7 / 10) = 7とはならない((10 * 7) / 10のように工夫せよ)
整数の桁あふれに注意する
中間結果の桁あふれに注意する
12.3 浮動小数点数
大きさが極端に異なる数の加算や減算は行わない
32ビットでは1,000,000 + 0.1 = 1,000,000になってしまう
等価を比較しない
0.1をループで10回足し合わせた数と1.0が等価と判定されるのは稀
丸め誤差を考慮する
倍精度浮動小数点数を使う
BCD ( Binary Coded Decimal ) を使う
整数に変換して扱う
12.4 文字と文字列
マジックキャラクタ・マジックストリングを使わない
文字列のインデックスアクセスに気をつける
言語や環境がUnicode対応かどうか
最初から国際化の戦略を練る
アルファベット言語を1つだけサポートすればいい場合はISO8850を検討する
今はもうそういう時代ではないですね...akht.icon
複数の言語をサポートする場合はUnicodeを使用する
文字列型の変換方式を統一する
12.4.1 Cの文字列
割愛
12.5〜tommy.icon
12.5 ブール変数
プログラムを文書化する
複雑な評価を単純にする
否定の演算子を使って複雑になるくらいなら, 関数化したほうがよいのでは?
必要であれば、ユーザー定義のブール型を作成する
C などでの話
12.6 列挙型
コードを読みやすくする
数値リテラルは列挙型に置き換えられないか検討
関数の引数の定義
コードの信頼性を高める
コードを変更しやすくする
ブール変数の代わりに使用する
無効な値を検査する
最初と最後の要素をループの範囲として定義する
最初の要素をわざと無効な値に設定する
コーディング標準に定義する
12.7 名前付き定数
データ宣言に使用する
「安全」なものであっても、リテラルを使用しない
適切なスコープの変数やクラスで名前付き定数をシミュレートする
一貫して使用する
12.8 配列
すべてのインデックスが配列の範囲内にあることを確認する
代わりにコンテナを使用するか、シーケンシャルな構造体と見なすことを検討する
終端を検査する
多次元配列の場合は、インデックスが正しい順番であることを確認する
インデックスのクロストークに注意する
Cでは、ARRAY_LENGTH()マクロを使う
12.9 ユーザー定義型の作成(型のエイリアス)
tommy.icon Ada の情報隠ぺいは「ほー」という感じ
機能に基づいた名前にする
組み込み型を使用しない
組み込み型を再定義しない
移植性のある型に置き換える